/**
 * 签署位混入组件
 */
import { debounce } from '../utils/signPosition'
import signPositionConst from '../constant/signPosition'

export default {
  data() {
    return {
      // 签章位置信息
      imageMaps: [], // 普通签章位置集合
      pagingSealInfos: [], // 骑缝章位置集合

      // PDF相关
      dragPosition: { width: 0, height: 0, left: 0 }, // 拖拽容器位置
      divWidth: 0, // PDF宽度
      divHeight: 0, // PDF高度
      docNumPages: 0, // 文档页数
      pdfPageOriginWidth: [], // PDF原始宽度

      // 表单数据
      form: {
        keyword: '', // 关键字
        showSignature: true, // 显示签署落款
        showDate: true, // 显示日期
        direction: signPositionConst.directionMap.horizontal // 排列方向
      },

      // 当前文件
      curFile: {
        fileId: '',
        id: '',
        fileName: ''
      },

      // 加载状态
      loadPdf: false,

      // 签署人列表
      personList: []
    }
  },

  computed: {
    /**
     * 拖拽临时容器
     */
    dragTemp() {
      return document.getElementById('dragTemp')
    }
  },

  methods: {
    /**
     * PDF渲染完成
     * @param {Object} pdfInfo PDF信息
     */
    pdfRendered(pdfInfo) {
      const { width, height, numPages } = pdfInfo
      this.divWidth = width
      this.divHeight = height
      this.docNumPages = numPages

      // 设置拖拽容器位置
      this.$nextTick(() => {
        const pdfElt = document.getElementById('pdfContainer')
        if (pdfElt) {
          const rect = pdfElt.getBoundingClientRect()
          this.dragPosition = {
            width: rect.width,
            height: rect.height,
            left: rect.left
          }
        }
      })
    },

    /**
     * 加载签章
     */
    async loadSign() {
      if (!this.curFile.fileId) return

      this.loadPdf = true
      try {
        const res = await this.$api.querySiteInfo({
          fileId: this.curFile.fileId
        })

        if (res.code === 0 && res.data) {
          const { siteInfos = [], pagingSealInfos = [] } = res.data
          this.imageMaps = siteInfos
          this.pagingSealInfos = pagingSealInfos
        }
      } catch (error) {
        console.error('加载签章失败:', error)
      } finally {
        this.loadPdf = false
      }
    },

    /**
     * 获取选中的签章信息
     */
    getCheckedSignIngos() {
      const checkedSignInfos = []
      const values = this.personList || []

      values.forEach(person => {
        // 公章
        if (person.checked) {
          checkedSignInfos.push({
            person,
            signMethod: signPositionConst._signNoMap.public
          })
        }

        // 签字
        if (person.nameChecked) {
          checkedSignInfos.push({
            person,
            signMethod: signPositionConst._signNoMap.qz
          })
        }

        // 私章
        if (person.onesChecked) {
          checkedSignInfos.push({
            person,
            signMethod: signPositionConst._signNoMap.ones
          })
        }

        // 财务章
        if (person.cwzChecked) {
          checkedSignInfos.push({
            person,
            signMethod: signPositionConst._signNoMap.cwz
          })
        }
      })

      return checkedSignInfos
    },

    /**
     * 获取保存参数
     * @param {Object} signSiteInfos 签章位置信息
     * @param {String} fileId 文件ID
     */
    getParams(signSiteInfos, fileId) {
      return {
        orderId: this.orderId,
        signSiteInfos: [
          {
            agreementId: fileId || this.curFile.fileId,
            ...signSiteInfos
          }
        ]
      }
    },

    /**
     * 拖拽结束保存签章
     * @param {Object} signsInfo 签章信息
     * @param {Boolean} showLoading 是否显示加载状态
     * @param {String} sealType 签章类型
     * @param {Number} saveType 保存类型
     */
    saveSignByDrag: debounce(function(signsInfo, showLoading, sealType, saveType) {
      this.saveSign(signsInfo, saveType, '', showLoading)
    }, 300)
  }
}